package com.explorati.LeetCode002.addTwoNumbers;

/**
 * @ Author : Weijian_Wang
 * @ Date : Created in 13:38 2020/10/4 0004
 * @ Description ：
 */
public class Solution1 {

    public class ListNode {
        int val;
        ListNode next;

        ListNode() {
        }

        ListNode(int val) {
            this.val = val;
        }

        ListNode(int val, ListNode next) {
            this.val = val;
            this.next = next;
        }
    }

    /**
     * 给出两个 非空 的链表用来表示两个非负的整数。其中，它们各自的位数是按照 逆序 的方式存储的，并且它们的每个节点只能存储 一位 数字。
     * @param l1
     * @param l2
     * @return
     */
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        ListNode pre = new ListNode(0);
        ListNode cur = pre;
        //是否有进位，因为是个位数相加
        int carry = 0;

        //如果l1或者l2其中任一不为空
        while(l1 != null || l2 != null) {
            int n1 = l1 == null ? 0 : l1.val;
            int n2 = l2 == null ? 0 : l2.val;

            //当前节点值 = (n1 + n2 + carry) % 10
            int val = (n1 + n2 + carry) % 10;

            cur.next = new ListNode(val);
            cur = cur.next;

            carry = (n1 + n2 + carry) / 10;

            if(l1 != null) {
                l1 = l1.next;
            }

            if(l2 != null) {
                l2 = l2.next;
            }
        }

        if(carry > 0) {
            cur.next = new ListNode(carry);
        }

        return pre.next;
    }
}
